//#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//#include<stdbool.h>
//typedef struct QTNode
//{
//    int data;
//    struct QTNode* next;
//}QTNode;
//
//typedef struct {
//    QTNode* front;
//    QTNode* back;
//    int size;
//}Queue;
//
//typedef struct {
//    Queue* q1;
//    Queue* q2;
//} MyStack;
//
//void QueueInit(Queue* pq)
//{
//    pq->front = pq->back = NULL;
//    pq->size = 0;
//}
//
//bool QTEmpty(Queue* pq)
//{
//    return pq->size == 0;
//}
//
//void QueuePush(Queue* pq, int x)
//{
//    QTNode* new = (QTNode*)malloc(sizeof(QTNode));
//    if (new==NULL)
//        exit(1);
//    new->next = NULL;
//    new->data = x;
//    if (!QTEmpty(pq))
//    {
//        pq->back->next = new;
//        pq->back = pq->back->next;
//    }
//    else
//    {
//        pq->back = pq->front = new;
//    }
//    pq->size++;
//}
//
//int QueuePeek(Queue* pq)
//{
//    return pq->front->data;
//}
//
//void QueuePop(Queue* pq)
//{
//    QTNode* del = pq->front;
//    pq->front = pq->front->next;
//    free(del);
//    del = NULL;
//    pq->size--;
//}
//
//int QueueSize(Queue* pq)
//{
//    return pq->size;
//}
//
//void QueueDestroy(Queue* pq)
//{
//    while (pq->size)
//        QueuePop(pq);
//    pq->back = pq->front = NULL;
//}
//
//////////////////////////////////////////////////
//
//MyStack* myStackCreate() {
//    MyStack* new = (MyStack*)malloc(sizeof(MyStack));
//    Queue* new1 = (Queue*)malloc(sizeof(Queue));
//    Queue* new2 = (Queue*)malloc(sizeof(Queue));
//    QueueInit(new1);
//    QueueInit(new2);
//    new->q1 = new1;
//    new->q2 = new2;
//    return new;
//}
//
//void myStackPush(MyStack* obj, int x) {
//    Queue* empty = obj->q1;
//    Queue* other = obj->q2;
//    if (!QTEmpty(obj->q1))
//    {
//        Queue* empty = obj->q2;
//        Queue* other = obj->q1;
//    }
//    QueuePush(other, x);
//}
//
//int myStackPop(MyStack* obj) {
//    Queue* empty = obj->q1;
//    Queue* other = obj->q2;
//    if (!QTEmpty(obj->q1))
//    {
//        empty = obj->q2;
//        other = obj->q1;
//    }
//    while (other->size > 1)
//    {
//        QueuePush(empty, QueuePeek(other));
//        QueuePop(other);
//    }
//    int ret = QueuePeek(other);
//    QueuePop(other);
//    return ret;
//}
//
//int myStackTop(MyStack* obj) {
//    Queue* empty = obj->q1;
//    Queue* other = obj->q2;
//    if (!QTEmpty(obj->q1))
//    {
//        Queue* empty = obj->q2;
//        Queue* other = obj->q1;
//    }
//    while (other->size > 1)
//    {
//        QueuePush(empty, QueuePeek(other));
//        QueuePop(other);
//    }
//    int ret = QueuePeek(other);
//    QueuePush(empty, QueuePeek(other));
//    QueuePop(other);
//    return ret;
//}
//
//bool myStackEmpty(MyStack* obj) {
//    return obj->q1 == obj->q2 && obj->q1 == NULL;
//}
//
//void myStackFree(MyStack* obj) {
//    QueueDestroy(obj->q1);
//    QueueDestroy(obj->q2);
//    obj->q1 = obj->q2 = NULL;
//    free(obj);
//}
//
//int main()
//{
//    MyStack* st = myStackCreate();
//    myStackPush(st, 1);
//    myStackPush(st, 1);
//    int a = myStackTop(st);
//    myStackPop(st);
//    bool i = myStackEmpty(st);
//    myStackFree(st);
//    return 0;
//}